package com.ruoyi.web.petmall.petback.controller;


import com.alibaba.druid.sql.visitor.functions.Char;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.web.petmall.entity.UserEntity;
import com.ruoyi.web.petmall.petback.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping(value ="/petBack/user")
@Api(tags = "用户管理")
public class UserController extends BaseController {


    @Autowired
    private UserService userService;

    @Autowired
    private TokenService tokenService;

    /**
     * 分页查询用户列表
     * @param userEntity 查询条件
     * @return 用户列表
     */
    @ApiOperation("分页查询用户列表")
    @GetMapping("/userList")
    public TableDataInfo userList(UserEntity userEntity) {
        startPage(); // 启动分页
        List<UserEntity> list = userService.userList(userEntity); // 调用服务层查询用户列表
        return getDataTable(list); // 封装并返回分页数据
    }

    /**
     * 修改用户信息
     * @param userEntity 用户信息
     * @return 操作结果
     */
    @ApiOperation("修改用户信息")
    @PostMapping("/updateUser")
    public AjaxResult updateUser(@RequestBody UserEntity userEntity) {
        LoginUser loginUser = getLoginUser();
        String newPassword = userEntity.getPassword();
        String oldPassword = loginUser.getPassword();

        // 检查新密码不能与旧密码相同
        if (SecurityUtils.matchesPassword(newPassword, oldPassword)) {
            return AjaxResult.error("新密码不能与旧密码相同");
        }

        // 加密新密码
        String encryptedPassword = SecurityUtils.encryptPassword(newPassword);
        userEntity.setUserMpassword(newPassword); // 设置用户密码（这里可能是设置错误的字段名，根据实际情况修改）
        userEntity.setPassword(encryptedPassword);

        // 更新用户信息
        if (userService.updateUser(userEntity) > 0) {
            // 更新缓存中的用户密码
            loginUser.getUser().setPassword(encryptedPassword);
            tokenService.setLoginUser(loginUser); // 更新token中的用户信息
            return AjaxResult.success();
        }
        return AjaxResult.error("修改异常，请联系管理员");
    }

    /**
     * 删除用户
     * @param userId 用户ID
     * @return 操作结果
     */
    @ApiOperation("删除用户")
    @DeleteMapping("/deleteUser/{userId}")
    public AjaxResult deleteUser(@PathVariable("userId") Long userId) {
        return toAjax(userService.deleteUser(userId)); // 调用服务层删除用户
    }
}
